/**
 * TODO(mapv js文件)
 * @author yuezg
 * @date   2018-4-9
 */
GeTools = new function($, jDocument) {

	this.setCookie = function(cName, value, exdays) {
		var exdate = new Date();
		exdate.setDate(exdate.getDate() + exdays);
		var cValue = encodeURIComponent(value) + ((exdays == null) ? '' :
			'; expires=' + exdate.toUTCString());
		document.cookie = [cName, '=', cValue].join('');
	}

	this.getCookie = function(cName) {
		var i, x, y, ARRcookies = document.cookie.split(';');
		for (i = 0; i < ARRcookies.length; i++) {
			x = ARRcookies[i].substr(0, ARRcookies[i].indexOf('='));
			y = ARRcookies[i].substr(ARRcookies[i].indexOf('=') + 1);
			x = x.replace(/^\s+|\s+$/g, '');
			if (x === cName) {
				return decodeURIComponent(y);
			}
		}
	}

	/**
	 * 空值处理
	 */
	this.getNullValue = function(value) {
		if (value == null)
			return '';
		else if (typeof value == 'undefined')
			return '';
		else if ($.trim(value) == 'null')
			return '';
		else
			return $.trim(value);
	};
	/**
	 * 单引号、双引号处理
	 */
	this.replaceMark = function(str) {
		if (this.getNullValue(str) != '') {
			str = this.getNullValue(str);
			str = str.replace(/"([^"]*)"/g, "“$1”"); //英文双引号(")替换为中文双引号(“”)
			str = str.replace(/'([^']*)'/g, "‘$1’"); //英文单引号(')替换为中文单引号(‘’)
		} else {
			str = '';
		}
		return str;
	};
	/**
	 * 清除html格式
	 */
	this.clearHtml = function(str) {
		str = this.getNullValue(str);
		str = str.replace(/"/g, ""); //替换"
		str = str.replace(/'/g, ""); //替换'
		str = str.replace(/[\r\n]/g, ""); //去掉回车换行
		str = str.replace(/\ +/g, ""); //去掉空格方法
		return str;
	};

	/**
	 * 取长文本摘要
	 */
	this.getAbstract = function(str) {
		var length = 50;
		str = this.clearHtml(str);
		if (str.length > length) {
			str = str.substring(0, length) + "...";
		}
		return str;
	};

	/**
	 * 日期格式化：将20180815180404格式化为2018.08.15
	 */
	this.fmtDateString = function(d) {
		if (d.length < 8) {
			return d;
		}
		var year = d.substring(0, 4);
		var month = d.substring(4, 6);
		var day = d.substring(6, 8);
		return year + "." + month + "." + day;
	};
	/**
	 * 邮箱验证
	 */
	this.checkEmail = function(str) {
		var reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
		if (this.getNullValue(str) == '') {
			return false;
		} else {
			if (reg.test(str)) {
				return true;
			} else {
				return false;
			}
		}
	};
	/**
	 * 电话号码验证
	 */
	this.checkPhone = function(str) {
		var isPhone = /^(0\d{2}-\d{8}|0\d{3}-\d{7}|\d{8}|\d{7})$/;
		//		  中国电信号段133、149、153、173、177、180、181、189、199
		//		  中国联通号段130、131、132、145、155、156、166、171、175、176、185、186
		//		  中国移动号段134(0-8)、135、136、137、138、139、147、150、151、152、157、158、159、172、178、182、183、184、187、188、198
		//		  其他号段
		//			  电信：1700、1701、1702
		//			  移动：1703、1705、1706
		//			  联通：1704、1707、1708、1709、171
		//			  卫星通信：1349

		var isMobile = /^(13[0-9]|14[5|7|9]|15[0|1|2|3|5|6|7|8|9]|17[0|1|2|3|5|6|7|8]|18[0|1|2|3|4|5|6|7|8|9]|19[8])\d{8}$/;

		if (this.getNullValue(str) == '') {
			return false;
		} else {
			if (isMobile.test(str)) {
				return true;
			} else {
				if (isPhone.test(str)) {
					return true;
				} else {
					return false;
				}
			}
		}
	};
	/**
	 * 将"\"替换为"\\"
	 * @param str
	 * @returns
	 */
	this.replaceMarkOne = function(str) {
		if (GeTools.getNullValue(str) != '') {
			str = GeTools.getNullValue(str);
			str = str.replace(/\\/g, "\\\\");
		} else {
			str = '';
		}
		return str;
	};
	/**
	 * 将"\"替换为"/"
	 * @param str
	 * @returns
	 */
	this.replaceMarkTwo = function(str) {
		if (GeTools.getNullValue(str) != '') {
			str = GeTools.getNullValue(str);
			str = str.replace(/\\/g, "/");
		} else {
			str = '';
		}
		return str;
	};
	/**
	 * 将"/"替换为"\"
	 * @param str
	 * @returns
	 */
	this.replaceMarkThree = function(str) {
		if (GeTools.getNullValue(str) != '') {
			str = GeTools.getNullValue(str);
			str = str.replace(/\//g, "\\");
		} else {
			str = '';
		}
		return str;
	};

	/**
	 * 判断某字符是英文
	 * @param str
	 * @returns
	 */
	this.isEnglish = function(s) {
		s = s.toUpperCase();
		return s === 'A' || s === 'B' || s === 'C' || s === 'D' || s === 'E' || s === 'F' || s === 'G' ||
			s === 'H' || s === 'I' || s === 'J' || s === 'K' || s === 'L' || s === 'M' || s === 'N' ||
			s === 'O' || s === 'P' || s === 'Q' || s === 'R' || s === 'S' || s === 'T' ||
			s === 'U' || s === 'V' || s === 'W' || s === 'X' || s === 'Y' || s === 'Z';
	};

	/**
	 * 获取请求参数，用户HTML见传值
	 *
	 */
	this.getParameter = function() {
		var url = window.location.search;
		var Request = new Object();
		if (url.indexOf("?") != -1) {
			var str = url.substr(1); //去掉?号
			strs = str.split("&");
			for (var i = 0; i < strs.length; i++) {
				var str_s = strs[i];
				var positon = str_s.indexOf("=");
				var key = str_s.substr(0, positon);
				var value = '';
				value = str_s.substr(positon + 1);
				Request[key] = value;
			}
		}
		return Request;
	}

	/**
	 * 加密（需要先加载lib/aes/aes.min.js文件）
	 * @param word
	 * @returns {*}
	 */
	this.encrypt = function(word) {
		var key = CryptoJS.enc.Utf8.parse(AES_KEY);
		var srcs = CryptoJS.enc.Utf8.parse(word);
		var encrypted = CryptoJS.AES.encrypt(srcs, key, {
			mode: CryptoJS.mode.ECB,
			padding: CryptoJS.pad.Pkcs7
		});
		return encrypted.toString();
	}

	/**
	 * 解密
	 * @param word
	 * @returns {*}
	 */
	this.decrypt = function(word) {
		var key = CryptoJS.enc.Utf8.parse(AES_KEY);
		var decrypt = CryptoJS.AES.decrypt(word, key, {
			mode: CryptoJS.mode.ECB,
			padding: CryptoJS.pad.Pkcs7
		});
		return CryptoJS.enc.Utf8.stringify(decrypt).toString();
	}
	//解密
	this.todecrypt = function(str) {
		return this.decrypt(decodeURIComponent(str));
	}
	//加密
	this.toencrypt = function(str) {
		return encodeURIComponent(this.encrypt(str));
	}
	//毫秒转时间(不是日期!!!)
	this.dateutil = function changeMillisecond(msd) {
		var time = parseFloat(msd) / 1000;
		if (null != time && "" != time) {
			var s = parseInt(time / 3600.0)
			if(s<10){
				s = "0"+s.toString()
			}
			var f =  parseInt((parseFloat(time / 3600.0) -
					parseInt(time / 3600.0)) * 60)
			if(f<10){
				f = "0"+f.toString()
			}
			var m =parseInt((parseFloat((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60) -
					parseInt((parseFloat(time / 3600.0) - parseInt(time / 3600.0)) * 60)) * 60)
			if(m<10){
				m = "0"+m.toString()
			}
			time =s+":"+f+":"+m;
		}
		return time;
	}

    /**
     * json Object 转换成数组，例如{'a':3, 'b':1,}====>[{k: "a", v: 3},{k: "b", v: 1}]
     * @param obj
     * @returns {Array}
     * @constructor
     */
    this.JSONObj2Array = function(obj) {
        var array = [];
        for(k in obj){
            array.push({'k':k,'v':obj[k]})
        }
        return array;
    }

    /**
     * json Object 转换成数组，例如{'a':3, 'b':1,}====>[{k: "a", v: 3},{k: "b", v: 1}]
     * @param obj
     * @returns {Array}
     * @constructor
     */
    this.Array2JSONObj = function(array) {
        var obj = {}
        for(j in array){
            obj[array[j]['k']] = array[j]['v']
        }
        return obj;
    }

    /**
     * 根据key的value对json排序
     * @param order
     * @param sortBy
     * @returns {Function}
     */
    this.getSortFun = function(order, sortBy) {
        var ordAlpah = (order == 'asc') ? '>' : '<';
        var sortFun = new Function('a', 'b', 'return a.' + sortBy + ordAlpah + 'b.' + sortBy + '?1:-1');
        return sortFun;
    };

    /**
     * 获取当前时间，格式：hh:mi:ss
     * @returns {string}
     */
    this.getCurTime = function(){
        var date=new Date();
        var year=date.getFullYear(); //获取当前年份
        var month=date.getMonth()+1; //获取当前月份
        var dat=date.getDate(); //获取当前日
        var day=date.getDay(); //获取当前星期几
        var hour=date.getHours(); //获取小时
        var minutes=date.getMinutes(); //获取分钟
        if(minutes<10){
            minutes = "0"+minutes;
        }
        var second=date.getSeconds(); //获取秒
        if(second<10){
            second = "0"+second;
        }
        return hour+':'+minutes+':'+second;
    };

    /**
     * 日期加减，返回格式：2020-06-05
     * @param days
     * @returns {string}
     */
    this.getCurDate = function(){
        var d=new Date();
        var m=d.getMonth()+1;
        var dd = d.getDate();
        return d.getFullYear()+'年'+m+'月'+dd+'日';
    }

    /**
     * 日期加减，返回格式：2020-06-05
     * @param days
     * @returns {string}
     */
    this.addDate = function(days){
        var d=new Date();
        d.setDate(d.getDate()+days);
        var m=d.getMonth()+1;
        if(m<10){
            m = "0"+m;
        }
        var dd = d.getDate();
        if(dd<10){
            dd = "0"+dd;
        }
        return d.getFullYear()+'-'+m+'-'+dd;
    }

}(jQuery, jQuery(document));
